// miniprogram/pages/me_dt/pub_detail/pub_detail.js
import common from "../../../utils/getMyData.js";
const db = wx.cloud.database();
const _ = db.command;
var app = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    task_id: "",
    task: {},
    puber: {},
    //任务回复部分
    desc: "",
    //附件上传部分
    bool_modify: false, //用户是否修改了任务
    delete_cloud_list: [], //用户删除云端文件的列表
    media: []
  },
  // 通过媒体列表预览图片或视频
  // 参数：current:下标、type：'pub'或'rece'，表示是发布列表还是接收列表
  showMedia(res) {
    var current = res.currentTarget.dataset.current
    var type = res.currentTarget.dataset.type
    if (type == 'pub') {
      wx.previewMedia({
        sources: this.data.task.task_pub_media,
        current: current
      })
    } else {
      wx.previewMedia({
        sources: this.data.task.task_rece_media,
        current: current
      })
    }
  },

  // 任务回复栏
  setDesc(res) {
    this.setData({
      desc: res.detail.value
    })
    this.bool_modify()
  },

  // 移植附件上传开始
  //this.data说明：只需要如上的media数组即可

  //判断是否到达提交表单的标志
  //移植:可自己编写，用于判断当前内容是否可以提交了，若不需要此函数则可将内容变为return
  bool_modify() {
    if ((this.data.desc != '') && ((this.data.desc != this.data.task.task_rece_des) || (this.data.media.length != this.data.task.task_rece_media.length) || (this.data.delete_cloud_list.length != 0))) {
      this.setData({
        bool_modify: true
      })
    } else {
      this.setData({
        bool_modify: false
      })
    }
  },
  // 选择上传：图片-视频 选择框
  actioncnt: function () {
    var _this = this;
    wx.showActionSheet({
      itemList: ['图片', '视频'],
      success: function (res) {
        if (res.tapIndex == 0) {
          _this.chooseImage()
        }
        if (res.tapIndex == 1) {
          _this.chooseVideo()
        }
      }
    })
  },

  // 选择照片来源
  chooseImage: function () {
    var _this = this;
    // 获取图片或视频的数量
    let len = this.data.media.length;

    // 在本地选择需上传的图片
    wx.chooseImage({
      count: 9 - len, //图片和视频上传数量之和不超过9
      sizeType: ['original'], //原图
      sourceType: ['album', 'camera'], //可以指定来源是相册还是相机, 默认二者都有
      success: function (res) {
        wx.showLoading({
          title: '上传中',
        })
        // 返回选定照片的本地文件路径列表,tempFilePaths可以作为img标签的scr属性显示图片
        var media_list = [] //加在media末尾的元素
        var img_list = res.tempFilePaths //新添图片路径数组
        for (var i = 0; i < img_list.length; i++) {
          media_list.push({
            url: img_list[i],
            type: "image"
          })
        }
        // 将新图片的数组添加到media尾部
        _this.setData({
          media: _this.data.media.concat(media_list)
        })
        //判断是否到达提交表单的标志
        _this.bool_modify()
        wx.hideLoading()
      },
      fail: function () {
        wx.showToast({
          title: '图片上传失败',
          icon: 'none'
        })
        return;
      }
    })
  },

  // 选择视频来源
  chooseVideo: function () {
    var _this = this;
    // 从本地选择视频
    wx.chooseVideo({
      success: function (res) {
        wx.showLoading({
          title: '上传中',
        })
        // 将视频添加到media头部
        _this.setData({
          media: [{
            url: res.tempFilePath,
            type: "video"
          }].concat(_this.data.media)
        })
        _this.bool_modify()
        wx.hideLoading()
      }
    })
  },

  //预览图片或视频
  //参数res:res.currentTarget.dataset.index即为data-index指定内容
  previewMedia(res) {
    wx.previewMedia({
      sources: this.data.media,
      current: res.currentTarget.dataset.index
    })
  },

  //删除图片或视频
  //参数res:res.currentTarget.dataset.index即为data-index指定内容
  deleteMedia(res) {
    var _this = this;
    var index = res.currentTarget.dataset.index
    var temp_list = this.data.media
    wx.showModal({
      title: '提示',
      content: '确认要删除吗?',
      success: function (res) {
        if (res.confirm) {
          //先判断改图片或视频是否已经在云端，若在云端则需要删除云端文件
          //不在此处删除文件，只是将删除文件路径存入数组，在提交函数submit时删除
          if (temp_list[index].url.startsWith('cloud')) {
            _this.data.delete_cloud_list.push(temp_list[index].url)
          }
          temp_list.splice(index, 1);
        } else if (res.cancel) {
          return
        }
        _this.setData({
          media: temp_list
        })
        _this.bool_modify()
      }
    })
  },

  //函数submit为移植时需要更改的地方
  //移植：其中多处待修改
  submit() {
    var _this = this
    var media = [] //存储云端图片或视频路径的数组
    var matchs = []
    var index = 0
    wx.showLoading({
      title: '上传中...',
    })

    // 上传图片或视频到云端
    Promise.all(this.data.media.map((item) => {
        //如果已经在云端，则无需上传直接返回
        if (item.url.startsWith('cloud')) {
          matchs[index++] = 0
          return item
        } else {
          matchs[index++] = 1
          return wx.cloud.uploadFile({
            // 移植：可更改视频和图片上传云端的路径，此处默认为task文件夹，更改'task/'部分即可
            cloudPath: 'task/' + Date.now() + (index) + item.url.match(/\.[^.]+?$/)[0], // 文件名称 
            filePath: item.url,
          })
        }
      }))
      .then(res => {
        //获取任务的media
        for (var i = 0; i < res.length; i++) {
          //matchs[i]可以区分是新增的元素还是原有的，此处是修改任务或表单时才有效
          if (matchs[i] == 0) {
            media.push(res[i])
          } else {
            media.push({
              url: res[i].fileID,
              type: _this.data.media[i].type
            })
          }
        }
        //更新media:将其中的url从本地路径变为云存储路径
        _this.setData({
          media: media
        })

        var that = _this
        //删除已在云存储删除列表的文件
        if (_this.data.delete_cloud_list.length != 0) {
          wx.cloud.deleteFile({
            fileList: _this.data.delete_cloud_list
          })
        }

        //移植：需要新增或更改记录的数据库操作
        db.collection('task').doc(this.data.task._id).update({
            data: {
              task_rece_des: that.data.desc,
              task_rece_time: new Date(),
              task_rece_media: that.data.media,
              task_status: true
            }
          })
          .then(res => {
            // 成功则显示成功
            //移植：上传成功提示信息，改变wx.showToast的title
            wx.hideLoading()
            wx.showToast({
              title: '回复成功',
              icon: 'success'
            })
            // 清空本地数据
            // 移植：此处用于清空本地数据或返回上一层
            wx.navigateBack({
              delta: -1,
            })
          })
      })
  },

  // 移植附件上传结束
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    wx.showLoading({
      title: '加载中',
    })
    this.setData({
      task_id: options.id
    })
    db.collection('task').doc(this.data.task_id).get()
      .then(res => {
        this.setData({
          task: res.data
        })
        // 内嵌函数1：转换时间
        this.setData({
          pub_time: common.getMyData(this.data.task.task_pub_time, 'Y-m-d H:i:s'),
        })
        if (this.data.task.task_status) {
          this.setData({
            rece_time: common.getMyData(this.data.task.task_rece_time, 'Y-m-d H:i:s')
          })
        }

        //内嵌函数2：根据发布者id查询发布者信息,并更新puber
        db.collection('user').where({
            _openid: this.data.task.task_puber
          }).get()
          .then(res => {
            this.setData({
              puber: res.data[0],
              desc: this.data.task.task_rece_des,
              media: this.data.task.task_rece_media
            })
            wx.hideLoading()
          })
      })
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {},

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})